# Contributor: He Yangxuan <yangxuan8282@gmail.com>
# Contributor: Timo Teras <timo.teras@iki.fi>
# Maintainer: Leonardo Arena <rnalrd@alpinelinux.org>
pkgname=u-boot
pkgver=2020.07
pkgrel=0
pkgdesc="u-boot bootloader common files"
url="http://www.denx.de/wiki/U-Boot/"
arch="armhf armv7 aarch64"
license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs
	ISC LGPL-2.0-only LGPL-2.1-only X11"
makedepends="$depends_dev bc dtc python3-dev swig bison flex openssl-dev"
if [ "$CARCH" = "aarch64" ]; then
	makedepends="$makedepends arm-trusted-firmware-sun50i"
fi
source="ftp://ftp.denx.de/pub/u-boot/u-boot-${pkgver//_/-}.tar.bz2
	README.txt
	update-u-boot
	"
builddir="$srcdir"/u-boot-${pkgver//_/-}

case "$CARCH" in
arm*) board_configs="
	beagleboard:am335x_boneblack_vboot
	cubieboard:Cubieboard,Cubieboard2
	leemaker:Bananapi,Lamobo_R1
	linksprite:Linksprite_pcDuino3_Nano
	cuboxi:mx6cuboxi
	raspberrypi:rpi_0_w,rpi,rpi_2,rpi_3_32b
	wandboard:wandboard
	qemu:qemu_arm
	";;
aarch64) board_configs="
	thunderx:thunderx_88xx
	raspberrypi:rpi_3
	odroid:odroid-c2
	libretech:libretech-cc
	qemu:qemu_arm64
	pine64:pine64-lts
	";;
esac

_allboards=""
for board_config in $board_configs; do
	_allboards="$_allboards $pkgname-${board_config%%:*}"
done
subpackages="$pkgname-all:_all $_allboards"

build() {
	cd "$builddir"
	touch include/config.h
	LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > include/timestamp_autogenerated.h
	LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> include/timestamp_autogenerated.h

	local board_config board
	for board_config in $board_configs; do
		local configs="${board_config#*:}"
		for board in ${configs//,/ }; do
			msg "Building u-boot for $board"

			case "$board" in
				"pine64-lts")
					export BL31="/usr/share/arm-trusted-firmware-sun50i/bl31.bin"
					;;
			esac

			export BUILD_DIR="$builddir"/build/$board
			mkdir -p "$BUILD_DIR"
			make O="$BUILD_DIR" ${board}_config || return 1
			make O="$BUILD_DIR" all || return 1
		done
	done
}

package() {
	cd "$builddir"/build
	mkdir -p "$pkgdir"/usr/share/$pkgname "$pkgdir"/usr/sbin
	install "$srcdir"/README.txt "$pkgdir"/usr/share/$pkgname/README.txt || return 1
	install "$srcdir"/update-u-boot "$pkgdir"/usr/sbin || return 1
}

_all() {
	pkgdesc="u-boot for all boards (meta package)"
	depends="$_allboards"

	mkdir -p "$subpkgdir"/
}

_split_boards() {
	cd "$builddir"/build
	pkgdesc="u-boot for $1"
	depends="u-boot"
	shift
	local board
	for board; do
		msg "Including board $board"
		mkdir -p "$subpkgdir"/usr/share/$pkgname/$board
		export BUILD_DIR="$builddir"/build/$board
		local ok=no
		for image in u-boot-sunxi-with-spl.bin -- MLO SPL u-boot.img -- u-boot.bin; do
			if [ "$image" = "--" ]; then
				[ "$ok" = yes ] && break
				continue
			fi
			if [ -e "$BUILD_DIR"/$image ]; then
				cp "$BUILD_DIR"/$image "$subpkgdir"/usr/share/$pkgname/$board \
					|| return 1
				ok=yes
			fi
		done
		[ "$ok" = yes ] || return 1
	done
}

for board_config in $board_configs; do
	_board="${board_config%%:*}"
	_configs="${board_config#*:}"
	eval "${_board}() { _split_boards $_board ${_configs//,/ }; }"
done

sha512sums="df91264fe8a42e676c3f2aa09d644c6a3035cc8169bf52a8ab95efe7e542cfc758a0ef150949b0d9f03c7dec7d95f8d20a2efe2dbb60c2ef1a61c8063770478d  u-boot-2020.07.tar.bz2
f8c9bb6e84d6f0620c976ac7ad5dd7ec7ff9dfdd4b1d03d2bf6653e7beccf80bdf2debfc92fb1f696dba92fb40287d3c45897e0078951451d0835cb61a5f16d1  README.txt
b3b4fb70c4eea2034bae45c513bca7b738be7507b46d3f2d62b31c794cd238d492acf960c95078cb1c945520debd5d2762103df7cef0fc36acfe9ff9a94549fc  update-u-boot"
